package com.cdp.web.controller.system.fileController;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cdp.common.core.domain.AjaxResult;
import com.cdp.common.core.domain.entity.SysPkl;
import com.cdp.system.dto.listPklDTO;
import com.cdp.system.service.ISysPklService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.nio.file.Paths;
import java.time.format.DateTimeFormatter;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 用户pkl
 */
@RestController
@RequestMapping
public class SysPklController {


    @Autowired
    private ISysPklService sysPklService;


//    /**
//     * 查询pkl列表
//     * @return
//     */
//    @PostMapping("listPkl")
//    public AjaxResult listPkl(){
//        LambdaQueryWrapper<SysPkl> wrapper = new LambdaQueryWrapper<>();
//        List<SysPkl> list = sysPklService.list(wrapper);
//        return AjaxResult.success(list);
//    }





//    @PostMapping("/listPkl")
//    public AjaxResult listPkl() {
//        LambdaQueryWrapper<SysPkl> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.orderByDesc(SysPkl::getCreateTime);
//
//        List<SysPkl> rawList = sysPklService.list(queryWrapper);
//
//        // 封装新的结构
//        List<Map<String, Object>> formattedList = rawList.stream().map(pkl -> {
//            Map<String, Object> map = new LinkedHashMap<>();
//            map.put("id", pkl.getId());
//            map.put("userId", pkl.getUserId());
//            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//            String formattedDate = pkl.getCreateTime().format(formatter);
//            map.put("createTime", formattedDate);
//
//
//            String replaceName = pkl.getModelName().replace(".pkl", "");
//            map.put("PklName", replaceName);
//
//            map.put("excelUrl", pkl.getXlsxFile());
//
//            map.put("excelName", pkl.getExcelName());
//
//            map.put("pklUrl", pkl.getPklUrl());
//
//
//            //新加字段
//            map.put("firstTargetFeature", pkl.getFirstTargetFeature());
//            map.put("selectFeature",pkl.getSelectFeature() );
//            map.put("xlsxFile", pkl.getXlsxFile());
//            map.put("recordName",pkl.getRecordName() );
//
//
//
//
//            // 入参
//            Map<String, Object> input = new LinkedHashMap<>();
//         //   input.put("excelFilePath", pkl.getExcelFilePath());//excel路径
//            input.put("xlsxFile", pkl.getXlsxFile());//excel路径
//            input.put("modelName", pkl.getModelName());//模型名称
//            input.put("inputFeatures", pkl.getInputFeatures());//输入特征
//            input.put("targetFeature", pkl.getTargetFeature());//目标
//            input.put("paramGrid", pkl.getParamGrid());//超参数
//            input.put("selectionLater", pkl.getSelectionLater());//数据库划分
//
//
//            // 出参
//            Map<String, Object> output = new LinkedHashMap<>();
//            output.put("pklUrl", pkl.getPklUrl());
//            output.put("ytrain", pkl.getYTrain());
//            output.put("ytest", pkl.getYTest());
//            output.put("ypredFinalTrain", pkl.getYPredFinalTrain());
//            output.put("ypredFinalTest", pkl.getYPredFinalTest());
//            output.put("finalR2Train", pkl.getFinalR2Train());
//            output.put("finalR2Test", pkl.getFinalR2Test());
//            output.put("finalMseTrain", pkl.getFinalMseTrain());
//            output.put("finalMseTest", pkl.getFinalMseTest());
//            output.put("bestParams", pkl.getBestParams());
//            output.put("metricsInfo", pkl.getMetricsInfo());
//
//            map.put("input", input);
//            map.put("output", output);
//
//            return map;
//        }).collect(Collectors.toList());
//
//        return AjaxResult.success(formattedList);
//    }
//


    @PostMapping("/listPkl")
    public AjaxResult listPkl(@RequestBody listPklDTO listPklDTO) {
//        LambdaQueryWrapper<SysPkl> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.orderByDesc(SysPkl::getCreateTime);

        List<SysPkl> rawList = sysPklService.listPkl(listPklDTO);

        // 封装新的结构
        List<Map<String, Object>> formattedList = rawList.stream().map(pkl -> {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("id", pkl.getId());
            map.put("userId", pkl.getUserId());
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            String formattedDate = pkl.getCreateTime().format(formatter);
            map.put("createTime", formattedDate);


            String replaceName = pkl.getModelName().replace(".pkl", "");
            map.put("PklName", replaceName);
            map.put("excelUrl", pkl.getXlsxFile());
            map.put("excelName", pkl.getExcelName());
            map.put("pklUrl", pkl.getPklUrl());


            //新加字段
            map.put("firstTargetFeature", pkl.getFirstTargetFeature());
            map.put("selectFeature",pkl.getSelectFeature() );
            map.put("xlsxFile", pkl.getXlsxFile());
            map.put("recordName",pkl.getRecordName() );


            // 入参
            Map<String, Object> input = new LinkedHashMap<>();
            //   input.put("excelFilePath", pkl.getExcelFilePath());//excel路径
            input.put("xlsxFile", pkl.getXlsxFile());//excel路径
            input.put("modelName", pkl.getModelName());//模型名称
            input.put("inputFeatures", pkl.getInputFeatures());//输入特征
            input.put("targetFeature", pkl.getTargetFeature());//目标
            input.put("paramGrid", pkl.getParamGrid());//超参数
            input.put("selectionLater", pkl.getSelectionLater());//数据库划分


            // 出参
            Map<String, Object> output = new LinkedHashMap<>();
            output.put("pklUrl", pkl.getPklUrl());
            output.put("ytrain", pkl.getYTrain());
            output.put("ytest", pkl.getYTest());
            output.put("ypredFinalTrain", pkl.getYPredFinalTrain());
            output.put("ypredFinalTest", pkl.getYPredFinalTest());
            output.put("finalR2Train", pkl.getFinalR2Train());
            output.put("finalR2Test", pkl.getFinalR2Test());
            output.put("finalMseTrain", pkl.getFinalMseTrain());
            output.put("finalMseTest", pkl.getFinalMseTest());
            output.put("bestParams", pkl.getBestParams());
            output.put("metricsInfo", pkl.getMetricsInfo());

            map.put("input", input);
            map.put("output", output);

            return map;
        }).collect(Collectors.toList());

        return AjaxResult.success(formattedList);
    }



}
